// ip属于同一子网
#include <stdio.h>
int isInvalid(int a, int b, int c, int d) {
  if (((a > 0) && (a <= 255)) && ((b >= 0) && (b <= 255)) &&
      ((c >= 0) && (c <= 255)) && ((d >= 0) && (d <= 255))) {
    return 0;
  }
  return -1;
}
int isInvalidMask(int a, int b, int c, int d) {
  int flag1 = 0;
  int flag0 = 0;
  unsigned int m;
  m = (a << 24) | (b << 16) | (c << 8) | d;

  for (int i = 0; i < 32; i++) {
    if ((m & 0x1) == 1) {
      flag1 = 1;

    } else if (((m & 0x1) == 0) && (flag1 == 1)) {
      // invalid
      flag0 = 2;
      break;
    }
    m = m >> 1;
  }
  if (2 == flag0) {
    return -1;
  }

  return 0;
}
int main() {
  // mask
  int mask1, mask2, mask3, mask4;
  int ip11, ip12, ip13, ip14;
  int ip21, ip22, ip23, ip24;
  while (EOF != scanf("%d.%d.%d.%d", &mask1, &mask2, &mask3, &mask4)) {
    // scanf("%d.%d.%d.%d", &mask1, &mask2, &mask3, &mask4);
    scanf("%d.%d.%d.%d", &ip11, &ip12, &ip13, &ip14);
    scanf("%d.%d.%d.%d", &ip21, &ip22, &ip23, &ip24);

    if ((0 == isInvalid(mask1, mask2, mask3, mask4)) &&
        (0 == isInvalid(ip11, ip12, ip13, ip14)) &&
        (0 == isInvalid(ip21, ip22, ip23, ip24)) &&
        (0 == isInvalidMask(mask1, mask2, mask3, mask4))) {
      if (((ip11 & mask1) == (ip21 & mask1)) &&
          ((ip12 & mask2) == (ip22 & mask2)) &&
          ((ip13 & mask3) == (ip23 & mask3)) &&
          ((ip14 & mask4) == (ip24 & mask4))) {
        // 0：IP1与IP2属于同一子网络
        printf("%d\r\n", 0);

      } else {
        // 2：IP1与IP2不属于同一子网络
        printf("%d\r\n", 2);
      }

    } else {
      // 1：IP地址或子网掩码格式非法；
      printf("%d\r\n", 1);
    }
  }
  return 0;
}